<?php

require_once('../krn_table.php');
require_once('../fct_dao_statut.php');
require_once('../commons_constantes.php');
require_once('../commons_atom.php');

tableDefinition
	(TABLE_DEFINITION
	,'tblCeremonie'
	,WEDDING_DBNAME
	,'CEREMONIE'
	,array
		('ID'
		,'ID_MARIAGE'
		,'ID_TYPE_CEREMONIE'
		,'LIBELLE_ADRESSE'
		,'ID_STATUT'
		,'HEURE_DEBUT'
		,'HEURE_FIN'
		,'DATE_INSERTION'
		,'DATE_MAJ'
		)
	);
	
	
/***********************************************************************************************************
 * Définition des fonctions d'interactions
 ***********************************************************************************************************/

/**
 * Méthode pour ajouter une adresse : ajout dans la table ADRESSE
 * @param $idMariage Identifiant technique du mariage pour lequel est ajoutée l'adresse
 * @param $idTypeCeremonie Identifiant technique du type de cérémonie ajouté
 * @param $libelleAdresse Libellé de l'adresse ajoutée
 * @param $heureDebut Heure de début de la cérémonie
 * @param $heureFin Heure optionnelle de fin de la cérémonie
 */
function ajouterAdresse
	($idMariage
	,$idTypeCeremonie
	,$libelleAdresse
	,$heureDebut
	,$heureFin=null
	)
{
	$currDate = gmdate('c');
	
	$idStatutByCode = getAllIdStatutByCode();
	
	$idInserted = insert
					('tblCeremonie'
					,array
						('ID_MARIAGE'		=> '?'
						,'ID_TYPE_ADRESSE'	=> '?'
						,'LIBELLE'			=> '?'
						,'ID_STATUT'		=> '?'
						,'HEURE_DEBUT'		=> '?'
						,'HEURE_FIN'		=> '?'
						,'DATE_INSERTION'	=> '?'
						,'DATE_MAJ'			=> '?'
						)
					,array
						($idMariage
						,$idTypeCeremonie
						,htmlEncode($libelleAdresse)
						,$idStatutByCode[STATUT_VALIDE]
						,$heureDebut
						,$heureFin
						,$currDate
						,$currDate
						)
					);
	return $idInserted;
}

/**
 * Retourne un tableau de tableaux associatifs des adresses - dans le statut validé - du mariage trié par heure croissante de début de cérémonie
 * d'identifiant $idMariage<br />
 * Si $idTypeCeremonie est nul, toutes les adresses définies pour le mariage sont retournées<br />
 * Si $idTypeCeremonie est non nul, toutes les adresses de type $idTypeCeremonie pour le mariage sont retournées.
 * Plusieurs adresses d'un même type donné peuvent être définies pour un même mariage<br />
 * Retourne un tableau vide si aucun résultat n'est trouvé<br />
 * @param $idMariage identifiant du mariage pour lequel on cherche toutes les adresses définies
 * @param $idTypeCeremonie optionnel. Identifiant du type d'adresse cherché
 * @return array : un tableau vide ou associatif nom de colonne - valeur
 */
function getAllCeremoniesByIdMariage($idMariage, $idTypeCeremonie=null) {
	$idStatutByCode = getAllIdStatutByCode();
	$where = 'WHERE ID_MARIAGE = ? AND ID_STATUT = ? ORDER BY HEURE_DEBUT ASC';
	$bindings = array($idMariage, $idStatutByCode[STATUT_VALIDE]);
	if (!is_null($idTypeCeremonie) && is_int($idTypeCeremonie)) {
		$where = ' AND ID_TYPE_CEREMONIE = ?';
		$bindings[] = $idTypeCeremonie;
	}
	
	$adresse = select('tblCeremonie', '*', $where, $bindings);
	return $adresse;
}


/**
 * Supprime l'adresse d'identifiant $idAdresse pour le mariage $idMariage en changeant son statut à supprimé
 * @param $idMariage
 * @param $idAdresse
 * @param $dateMaj
 * @return true / false
 */
function supprimerAdresse
	($idMariage
	,$idAdresse
	,$dateMaj=null
	)
{
	if ($dateMaj == null) {
		$dateMaj = gmdate('c');
	}
	
	$idStatutByCode = getAllIdStatutByCode();
					
	$updated = update
			('tblCeremonie'
			,array
				('ID_STATUT'	=> '?'
				,'DATE_MAJ'		=> '?'
				)
			,'WHERE ID = ? AND ID_MARIAGE = ?'
			,array
				($idStatutByCode[STATUT_SUPPRIME]
				,$dateMaj
				,$idAdresse
				,$idMariage
				)
			);
	return $updated;
}
	